package com.controle;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import com.negocio.entidades.Questao;
import com.negocio.entidades.TipoQuestao;
import com.negocio.entidades.Usuario;
import com.negocio.facade.QuestaoRemote;
@SessionScoped
@ManagedBean(name ="questaoMB")
public class QuestaoMB extends AbstractMB implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@EJB
	private QuestaoRemote questaoBean;
	private Questao qst;
	private List<Questao> questoes;
	private Questao selectedQuestao;
	private StreamedContent imagem;
	public QuestaoMB() {
		qst = new Questao();
		selectedQuestao = new Questao();
	}
	
	//============================= GETS SETS ======================================	
	public Questao getQst() {
		return qst;
	}

	public void setQst(Questao qst) {
		if (qst.getEnunciadoImage() !=null)
			imagem = new DefaultStreamedContent(new ByteArrayInputStream(qst.getEnunciadoImage()));
		this.qst = qst;
	}

	public List<Questao> getQuestoes() {
		System.out.println("passou aki");
		questoes = questaoBean.listar();
		return questoes;
	}

	public void setQuestoes(List<Questao> questoes) {
		this.questoes = questoes;
	}

	public Questao getSelectedQuestao() {
		return selectedQuestao;
	}

	public void setSelectedQuestao(Questao selectedQuestao) {
		this.selectedQuestao = selectedQuestao;
	}
	
	//=================================================================================
	public void doPrepararInserir() throws Exception {  
		setQst(new Questao());
    }

	public void doSalvar() throws Exception {
		if (qst.getId() == Long.valueOf(0)) {
			try {
				doInserir();
			} catch (Exception e) {
				displayErrorMessageToUser("Erro ao salvar Questao.");
			}
		} else {
			try { 
				doAlterar();
				
			} catch (Exception e) {
				displayErrorMessageToUser("Erro ao alterar Questao.");
			}
		}
	}

	
	
	public void doInserir() throws Exception {  
			String respostaText = "";
			respostaText = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("respostaSelect");
			if (respostaText == null){
				respostaText = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("respostaTextArea");
			}
			qst.setRespostaText(respostaText);
			questaoBean.salvar(qst);
			qst = new Questao();
			RequestContext.getCurrentInstance().execute("dlg.hide()");
    }
	
	public void doAlterar() throws Exception {  
			String respostaText = "";
			respostaText = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("respostaSelect");
			if (respostaText == null){
				respostaText = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("respostaTextArea");
			}
			qst.setRespostaText(respostaText);
			questaoBean.salvar(qst);	
			qst = new Questao();
			RequestContext.getCurrentInstance().execute("dlg.hide()");
    }
	
	public void doRemover(Questao questao) {  
		try {
			questaoBean.excluir(questao.getId());	
		} catch (Exception e) {
			displayErrorMessageToUser("Erro ao excluir Questao.");
		}
    }
	
	public TipoQuestao[] getTipos(){
		return TipoQuestao.values();
	}
	
	public void fileUpload(FileUploadEvent event) throws IOException {
	   
		
			 imagem = new DefaultStreamedContent(event.getFile().getInputstream());
			 byte[] foto = event.getFile().getContents();
			 this.qst.setEnunciadoImage(foto);
			 
		
		
	}

	public StreamedContent getImagem() {
		return imagem;
	}

	public void setImagem(StreamedContent imagem) {
		this.imagem = imagem;
	}
}
